package com.horsen.service.user.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.horsen.service.user.model.BO.OrderOutputBO;
import com.horsen.service.user.model.DTO.OrderQueryDTO;
import com.horsen.service.user.model.Order;
import com.horsen.service.user.model.VO.OrderInfoVO;
import com.horsen.service.user.model.VO.OrderListVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 订单 服务类
 * </p>
 *
 * @author Horsen
 * @since 2021-05-10
 */
public interface OrderService extends IService<Order> {
    /**
     * 根据课程ID新增一个订单
     *
     * @param courseId 课程ID
     * @param memberId 会员ID
     * @return 订单ID
     */
    String insert(String courseId, String memberId);

    /**
     * 根据ID获取一个订单
     *
     * @param orderId  订单ID
     * @param memberId 会员ID
     * @return 订单信息VO
     */
    OrderInfoVO getById(String orderId, String memberId);

    /**
     * 获取订单支付状态
     *
     * @param courseId 课程ID
     * @param memberId 会员ID
     * @return 是否已经支付
     */
    Boolean isPaid(String courseId, String memberId);

    /**
     * 修改订单支付状态
     *
     * @param orderNo 订单号
     * @return 是否修改成功
     */
    Boolean pay(String orderNo);

    /**
     * 分页查询
     *
     * @param page          当前页码
     * @param limit         每页记录数
     * @param orderQueryDTO 订单查询DTO
     * @return IPage类实例
     */
    IPage<OrderListVO> pageSelect(Long page, Long limit, OrderQueryDTO orderQueryDTO);

    /**
     * 导出订单到Excel文件
     *
     * @param list 订单列表
     * @return 文件位置
     */
    String output(List<OrderOutputBO> list);

    /**
     * 获取销售额
     *
     * @return 销售额
     */
    BigDecimal countPaid();

}
